package org.front.server.handler;

import org.apache.log4j.Logger;
import org.front.client.service.DistributeurService;
import org.front.server.business.DistributeurBusiness;
import org.front.server.utils.ApplicationContextHolder;
import org.front.shared.data.Compartiment;
import org.front.shared.data.Distributeur;
import org.front.shared.wrap.ModifierCompartimentRequest;
import org.front.shared.wrap.StatistiqueRequest;
import org.front.shared.wrap.StatistiqueResponse;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

/**
 * The server side implementation of the RPC service.
 */
@SuppressWarnings("serial")
public class DistributeurServiceImpl extends RemoteServiceServlet implements DistributeurService {

	private static final Logger LOG = Logger.getLogger(DistributeurServiceImpl.class);

	public Distributeur getDistributeur() throws Exception {
		try {
			DistributeurBusiness distributeurBusiness = (DistributeurBusiness) ApplicationContextHolder.getBean("distributeurBusiness");
			return distributeurBusiness.getDistibuteur();
		} catch (Exception exception) {
			LOG.error("Erreur dans la recuperation du distributeur", exception);
			throw exception;
		}
	}

	public void acheterProduit(Compartiment compartiment) throws Exception {
		try {
			DistributeurBusiness distributeurBusiness = (DistributeurBusiness) ApplicationContextHolder.getBean("distributeurBusiness");
			distributeurBusiness.acheterProduit(compartiment);
		} catch (Exception exception) {
			LOG.error("Erreur dans l'achat d'un du produit " + compartiment.getProduit().getDescription() + " dans le compartiment " + compartiment.getNumero(), exception);
			throw exception;
		}
	}

	@Override
	public void modifierCompartiment(ModifierCompartimentRequest request) throws Exception {
		try {
			DistributeurBusiness distributeurBusiness = (DistributeurBusiness) ApplicationContextHolder.getBean("distributeurBusiness");
			distributeurBusiness.modifierCompartiment(request.getCompartiment(), request.getProduit(), request.getQuantite(), request.isCreation());
		} catch (Exception exception) {
			LOG.error("Erreur dans la modification du compartiment", exception);
			throw exception;
		}
	}

	@Override
	public StatistiqueResponse getStatistique(StatistiqueRequest request) throws Exception {
		try {
			DistributeurBusiness distributeurBusiness = (DistributeurBusiness) ApplicationContextHolder.getBean("distributeurBusiness");
			return distributeurBusiness.getStatitistiques(request);
		} catch (Exception exception) {
			LOG.error("Erreur dans la recuperation des statistiques ", exception);
			throw exception;
		}

	}
}
